/*
 *  Copyright (c) 2021-2022 ForteScarlet <ForteScarlet@163.com>
 *
 *  本文件是 simply-robot (或称 simple-robot 3.x 、simbot 3.x ) 的一部分。
 *
 *  simply-robot 是自由软件：你可以再分发之和/或依照由自由软件基金会发布的 GNU 通用公共许可证修改之，无论是版本 3 许可证，还是（按你的决定）任何以后版都可以。
 *
 *  发布 simply-robot 是希望它能有用，但是并无保障;甚至连可销售和符合某个特定的目的都不保证。请参看 GNU 通用公共许可证，了解详情。
 *
 *  你应该随程序获得一份 GNU 通用公共许可证的复本。如果没有，请看:
 *  https://www.gnu.org/licenses
 *  https://www.gnu.org/licenses/gpl-3.0-standalone.html
 *  https://www.gnu.org/licenses/lgpl-3.0-standalone.html
 *
 */

package love.forte.simbot


/**
 * Simbot中的部分特殊异常的标记接口。
 * @author ForteScarlet
 *
 * @see Simbot.check
 * @see Simbot.require
 *
 * @see SimbotException
 * @see SimbotRuntimeException
 * @see SimbotIllegalArgumentException
 * @see SimbotIllegalStateException
 */
public interface SimbotError {
    public val message: String?
    public val cause: Throwable?
}


/**
 * 基础的simbot受检异常。
 * @author ForteScarlet
 */
public open class SimbotException : Exception, SimbotError {
    public constructor() : super()
    public constructor(message: String?) : super(message)
    public constructor(message: String?, cause: Throwable?) : super(message, cause)
    public constructor(cause: Throwable?) : super(cause)
}

/**
 * 基础的simbot的运行时异常。
 * @author ForteScarlet
 */
public open class SimbotRuntimeException : RuntimeException, SimbotError {
    public constructor() : super()
    public constructor(message: String?) : super(message)
    public constructor(message: String?, cause: Throwable?) : super(message, cause)
    public constructor(cause: Throwable?) : super(cause)
}

/**
 * simbot中的参数异常。
 * @author ForteScarlet
 *
 * @see IllegalArgumentException
 */
public open class SimbotIllegalArgumentException : SimbotError, IllegalArgumentException {
    public constructor() : super()
    public constructor(message: String?) : super(message)
    public constructor(message: String?, cause: Throwable?) : super(message, cause)
    public constructor(cause: Throwable?) : super(cause)
}

/**
 * simbot中的状态异常
 * @author ForteScarlet
 *
 * @see IllegalArgumentException
 */
public open class SimbotIllegalStateException : SimbotError, IllegalArgumentException {
    public constructor() : super()
    public constructor(message: String?) : super(message)
    public constructor(message: String?, cause: Throwable?) : super(message, cause)
    public constructor(cause: Throwable?) : super(cause)
}



